package com.seven.digest;

import com.sun.org.apache.xml.internal.security.utils.Base64;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 消息摘要算法，防止篡改
 */
public class DigestDemo1 {
    public static void main(String[] args) throws Exception{
        //原文
        String input="aa";
        //算法
        String algorithm="MD5";
        String md5 = getDigeat(input, algorithm);
        System.out.println("md5="+md5);

        String sha1 = getDigeat(input, "SHA-1");
        System.out.println("sha1="+sha1);

        String sha256 = getDigeat(input, "SHA-256");
        System.out.println("sha256="+sha256);

        String sha512 = getDigeat(input, "SHA-512");
        System.out.println("sha512="+sha512.length());
    }

    /**
     * 数字知摘要
     * @param input
     * @param algorithm
     * @return
     * @throws NoSuchAlgorithmException
     */
    private static String getDigeat(String input, String algorithm) throws NoSuchAlgorithmException {
        //创建消息摘要对象
        MessageDigest digest = MessageDigest.getInstance(algorithm);
        //执行消息摘要算法
        byte[] bytes = digest.digest(input.getBytes());

        return toHex(bytes);
    }

    private static String toHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        //手动转码
        for (byte aByte : bytes) {
            //把密文转换成16进制
            String s=Integer.toHexString(aByte & 0xff);
            //判断如果密文长度是1，需要在高位补0
            if (s.length()==1){
                s="0"+s;
            }
            sb.append(s);
        }
        //使用base64进行转码
        /*String str= Base64.encode(bytes);
        System.out.println(str);*/

        return sb.toString();
    }
}
